<?php

class MatriculacionWizardService {

    static function getAlumno($dataPost)
    {
    	$model = new Alumno();
    	
    	if ( isset($dataPost['Persona']['originalNumeroDoc']) && isset($dataPost['Persona']['originalTipoDoc'])
    		&& trim($dataPost['Persona']['originalNumeroDoc']) != '' && trim($dataPost['Persona']['originalNumeroDoc']) != '')
    	{
    		
    		$alumno = Alumno::model()->findByPk(
    												array(
    														'alumno_persona_tipodocumento_id'=>$dataPost['Persona']['originalTipoDoc'],
    														'alumno_persona_numerodocumento'=>$dataPost['Persona']['originalNumeroDoc']
    												)
    											);
    											
    		if(!is_null($alumno))
    		{
    			$model = $alumno;
    		}
    		else 
    		{
    			$model->addError('alumno_persona', t('Alumno no encontrado', 'persona_etiqueta'));
    		}
        } 
        elseif(isset($dataPost['Persona']['originalNumeroDoc']) && trim($dataPost['Persona']['originalNumeroDoc']) != '') 
        {
        	$model->addError('alumno_persona', t('Debe Seleccionar una Persona', 'persona_etiqueta'));
		}
		return $model;
    }

    static function getProgramasAcademicosAMatricular(Alumno $alumno)
    {
    	$subquery = 'select *
				from tbl_preinscripcion tpi2
				where 
					tpi1.preinscripcion_alumno_persona_tipodocumento_id = tpi2.preinscripcion_alumno_persona_tipodocumento_id 
					and tpi1.preinscripcion_alumno_persona_numerodocumento = tpi2.preinscripcion_alumno_persona_numerodocumento
					and tpi1.preinscripcion_ingreso_programaacademico_id  = tpi2.preinscripcion_ingreso_programaacademico_id
					and tpi1.preinscripcion_ingreso_periodoingreso_id > tpi2.preinscripcion_ingreso_periodoingreso_id
					and tpi2.fecha_baja is null';
					
    	$criteria = new CDbCriteria();
    	$criteria->alias = 'tpi1';
    	$criteria->addCondition('tpi1.preinscripcion_alumno_persona_tipodocumento_id	= :tipoDOC');
    	$criteria->addCondition('tpi1.preinscripcion_alumno_persona_numerodocumento	= :numDOC');
    	$criteria->addCondition('tpi1.preinscripcion_fechabaja is null');
    	$criteria->addCondition('tpi1.preinscripcion_ingreso = 1');
    	$criteria->addCondition('not exists ('.$subquery.')');
    	
    	$criteria->params = array(':tipoDOC'=>$alumno->alumno_persona_tipodocumento_id, ':numDOC'=>$alumno->alumno_persona_numerodocumento);
    	
    	$resultado = PreInscripcion::model()->findAll($criteria);
    	
    	
    	
    	return $resultado;
    }

    static function setCurso(PreInscripcion $preInscripcion, $dataPost) {
        if (isset($dataPost['PreInscripcion']['preinscripcion_ingresocurso_id'])) {//quiere decir que este programa tiene un curso de ingreso
            $preInscripcion->preinscripcion_cursoequivalente = $dataPost['PreInscripcion']['preinscripcion_cursoequivalente'];
            //var_dump($model->preinscripcion_cursoequivalente);exit;
            if ($preInscripcion->preinscripcion_cursoequivalente == 0) {//significa que se lo aprobo por curso equivalente
                $preInscripcion->preinscripcion_ingresocurso_id = $dataPost['PreInscripcion']['preinscripcion_ingresocurso_id'];
                //var_dump($model->preinscripcion_ingresocurso_id);exit;
            } else {
                $preInscripcion->preinscripcion_ingresocurso_id = null;
            }
        } else {
            $preInscripcion->preinscripcion_cursoequivalente = null;
            $preInscripcion->preinscripcion_ingresocurso_id = null;
        }

        return $preInscripcion;
    }

    static function setTurno(PreInscripcion $preInscripcion, $dataPost) {
        $preInscripcion->preinscripcion_turno_id = $dataPost['PreInscripcion']['preinscripcion_turno_id'];
        $preInscripcion->preinscripcion_turnoeleccion_id = $dataPost['PreInscripcion']['preinscripcion_turnoeleccion_id'];
        return $preInscripcion;
    }

    static function setBaja(PreInscripcion $preInscripcion, $dataPost) {
        if (isset($dataPost['bajaInscripcion'])) {
            $preInscripcion->preinscripcion_motivobaja_id = $dataPost['PreInscripcion']['preinscripcion_motivobaja_id'];
            $preInscripcion->preinscripcion_observacion = $dataPost['PreInscripcion']['preinscripcion_observacion'];


            if (!is_null($preInscripcion->preinscripcion_fechabaja)) {//cancela baja
                $preInscripcion->preinscripcion_motivobaja_id = null;
                $preInscripcion->preinscripcion_fechabaja = null;
                $preInscripcion->preinscripcion_estado_id = AplicacionVariables::ESTADO_ACTIVO_ID;
            } else {
                $preInscripcion->preinscripcion_fechabaja = new CDbExpression('NOW()');
                ;
                $preInscripcion->preinscripcion_estado_id = AplicacionVariables::ESTADO_BAJA_ID;
            }
        }

        return $preInscripcion;
    }

    static function setPersona(PreInscripcion $preInscripcion, $dataPost) {
        
    }

    public static function getCierreDePlanillas(PreInscripcion $preInscripcion) {

        $subquerySumaNotas = 'select sum(IFNULL(iapi.inpr_nota,0)) ';
        $subquerySumaNotas .= 'from tbl_rel_ingresoactividad_preinscripcion as iapi ';
        $subquerySumaNotas .= 'where ';
        $subquerySumaNotas .= 'iapi.inpr_alumno_persona_numerodocumento = tpi.preinscripcion_alumno_persona_numerodocumento ';
        $subquerySumaNotas .= 'and iapi.inpr_alumno_persona_tipodocumento_id = tpi.preinscripcion_alumno_persona_tipodocumento_id ';
        $subquerySumaNotas .= 'and iapi.inpr_periodoingreso_id = tpi.preinscripcion_ingreso_periodoingreso_id ';
        $subquerySumaNotas .= 'and iapi.inpr_programaacademico_id = tpi.preinscripcion_ingreso_programaacademico_id ';
        $subquerySumaNotas .= 'and iapi.inpr_ingresocurso_id = tpi.preinscripcion_ingresocurso_id ';

        $subQueryCantAct = 'select count(*) ';
        $subQueryCantAct .= 'from tbl_ingresoactividad as ia ';
        $subQueryCantAct .= 'where ia.ingresoactividad_periodoingreso_id = tpi.preinscripcion_ingreso_periodoingreso_id ';
        $subQueryCantAct .= 'and ia.ingresoactividad_programaacademico_id = tpi.preinscripcion_ingreso_programaacademico_id';

        $subQueryPromedio = 'ifnull(((' . $subquerySumaNotas . ') / (' . $subQueryCantAct . ')),0) as preinscripcion_alumno_promedio, ';

        $subQueryTieneActObli = 'select count(*) ';
        $subQueryTieneActObli .= 'from tbl_ingresoactividad as ia ';
        $subQueryTieneActObli .= 'where ';
        $subQueryTieneActObli .= 'ia.ingresoactividad_periodoingreso_id = tpi.preinscripcion_ingreso_periodoingreso_id ';
        $subQueryTieneActObli .= 'and ia.ingresoactividad_programaacademico_id = tpi.preinscripcion_ingreso_programaacademico_id ';
        $subQueryTieneActObli .= 'and ia.ingresoactividad_obligatoria = :obligatoria';


        $subQueryActObliApro = 'select count(*)';
        $subQueryActObliApro .= 'from tbl_rel_ingresoactividad_preinscripcion as iapi ';
        $subQueryActObliApro .= 'join tbl_ingresoactividad ia ';
        $subQueryActObliApro .= 'on iapi.inpr_periodoingreso_id = ia.ingresoactividad_periodoingreso_id ';
        $subQueryActObliApro .= 'and iapi.inpr_programaacademico_id = ia.ingresoactividad_programaacademico_id ';
        $subQueryActObliApro .= 'and iapi.inpr_ingresoactividad_id = ia.ingresoactividad_actividadingreso_id ';
        $subQueryActObliApro .= 'where ';
        $subQueryActObliApro .= 'iapi.inpr_alumno_persona_numerodocumento = tpi.preinscripcion_alumno_persona_numerodocumento ';
        $subQueryActObliApro .= 'and iapi.inpr_alumno_persona_tipodocumento_id = tpi.preinscripcion_alumno_persona_tipodocumento_id ';
        $subQueryActObliApro .= 'and iapi.inpr_periodoingreso_id = tpi.preinscripcion_ingreso_periodoingreso_id ';
        $subQueryActObliApro .= 'and iapi.inpr_programaacademico_id =tpi.preinscripcion_ingreso_programaacademico_id ';
        $subQueryActObliApro .= 'and iapi.inpr_ingresocurso_id = tpi.preinscripcion_ingresocurso_id ';
        $subQueryActObliApro .= 'and iapi.inpr_nota >= tincu.ingresocurso_porcentajeaprobacion ';
        $subQueryActObliApro .= 'and ia.ingresoactividad_obligatoria = :obligatoria';

        $criteria = new CDbCriteria();
        //id
        $criteria->select = 'tpi.preinscripcion_alumno_persona_numerodocumento,';
        $criteria->select .= 'tpi.preinscripcion_alumno_persona_tipodocumento_id,';
        $criteria->select .= 'tpi.preinscripcion_ingreso_periodoingreso_id,';
        $criteria->select .= 'tpi.preinscripcion_ingreso_programaacademico_id,';
        $criteria->select .= 'tpi.preinscripcion_ingresocurso_id,';
        
        
        $criteria->select .= 'tper.persona_nombres as preinscripcion_alumno_persona_nombres,';
        $criteria->select .= 'tper.persona_apellido as preinscripcion_alumno_persona_apellido,';
        
        
        
        $criteria->select .= 'tido.tipodocumento_abreviacion as preinscripcion_tipodocumento_abreviacion,';
        
        $criteria->select .= 'talu.alumno_legajo as preinscripcion_alumno_legajo,';
        $criteria->select .= 'tincu.ingresocurso_porcentajeaprobacion as preinscripcion_ingresocurso_porcentajeaprobacion,';
        $criteria->select .= $subQueryPromedio;
        $criteria->select .= 'case(' . $subQueryTieneActObli . ') when 0 then 0 else ((' . $subQueryActObliApro . ') < (' . $subQueryTieneActObli . ')) end as preinscripcion_alumno_reprobo, ';
        $criteria->select .= 'tpi.preinscripcion_aprobocursoingreso,';
        
        
        
        
        
        $criteria->select .= 'concat(tpei.periodoingreso_periodo,"/",tpei.periodoingreso_anio) as preinscripcion_ingreso_periodoingreso_nombre,';
        $criteria->select .= 'tpa.programaacademico_nombre as preinscripcion_programaacademico_nombre,';
        
        $criteria->select .= 'tpi.preinscripcion_fechacierre';
        
        $criteria->alias = 'tpi';
        
        $criteria->join = 'join tbl_tipodocumento tido on ';
        $criteria->join .= 'tpi.preinscripcion_alumno_persona_tipodocumento_id = tido.tipodocumento_id ';
        
        $criteria->join .= 'join tbl_alumno as talu on ';
        $criteria->join .= 'tpi.preinscripcion_alumno_persona_numerodocumento = talu.alumno_persona_numerodocumento ';
        $criteria->join .= 'and tpi.preinscripcion_alumno_persona_tipodocumento_id = talu.alumno_persona_tipodocumento_id ';
        
        
        $criteria->join .= 'join tbl_persona as tper on ';
        $criteria->join .= 'tpi.preinscripcion_alumno_persona_numerodocumento = tper.persona_numerodocumento ';
        $criteria->join .= 'and tpi.preinscripcion_alumno_persona_tipodocumento_id = tper.persona_tipodocumento_id ';
        
        
        $criteria->join .= 'join tbl_ingresocurso tincu on ';
        $criteria->join .= 'tpi.preinscripcion_ingresocurso_id = tincu.ingresocurso_id ';
        
        $criteria->join .= 'join tbl_periodoingreso tpei on ';
        $criteria->join .= 'tpi.preinscripcion_ingreso_periodoingreso_id = tpei.periodoingreso_id ';
        
        $criteria->join .= 'join tbl_programaacademico tpa on ';
        $criteria->join .= 'tpi.preinscripcion_ingreso_programaacademico_id = tpa.programaacademico_id ';

        $criteria->order = 'preinscripcion_alumno_persona_apellido';
        
        $criteria->params = array();
        
        $criteria->params[':obligatoria'] = 1;
        
        //no tiene que tener seleccionado el curso equivalente
        $criteria->addCondition('tpi.preinscripcion_cursoequivalente = :cursoEquivalente');
        $criteria->params[':cursoEquivalente'] = 0;
        
        
        
        if(intval($preInscripcion->preinscripcion_ingreso_periodoingreso_id) > 0)
        {
            $criteria->addCondition('tpi.preinscripcion_ingreso_periodoingreso_id = :periodoID');
            $criteria->params[':periodoID'] = $preInscripcion->preinscripcion_ingreso_periodoingreso_id;
        }
        
        if(intval($preInscripcion->preinscripcion_ingreso_programaacademico_id) > 0)
        {
            $criteria->addCondition('tpi.preinscripcion_ingreso_programaacademico_id = :programaID');
            $criteria->params[':programaID'] = $preInscripcion->preinscripcion_ingreso_programaacademico_id;
        }
        
        if(intval($preInscripcion->preinscripcion_ingresocurso_id) > 0)
        {
            $criteria->addCondition('tpi.preinscripcion_ingresocurso_id = :cursoID');
            $criteria->params[':cursoID'] = $preInscripcion->preinscripcion_ingresocurso_id;
        }
        
        return $preInscripcion->findAll($criteria);
      
    }


    public static function setCierreDePlanillas($coleccion,$dataPost){
        $returnCollection = null;
        foreach ($coleccion as $item)
        {
            foreach($dataPost['PreInscripcion']['inpr_periodoingreso_id'] as $key)
            {
                
                list($periodoID, $programaID, $cursoID, $tDOCID, $numDOC, $aprobo) = explode('_', $key);
                
                $tmpPreInscripcion = PreInscripcion::model()->findByPK(
                        array(
                            'preinscripcion_ingreso_periodoingreso_id' => $periodoID,
                            'preinscripcion_ingreso_programaacademico_id' => $programaID,
                            'preinscripcion_ingresocurso_id' => $cursoID,
                            'preinscripcion_alumno_persona_tipodocumento_id' => $tDOCID,
                            'preinscripcion_alumno_persona_numerodocumento' => $numDOC
                        )
                );
                
                $tmpPreInscripcion->preinscripcion_fechacierre = new CDbExpression('NOW()');
                $tmpPreInscripcion->preinscripcion_aprobocursoingreso = $aprobo;
                $returnCollection[] = $tmpPreInscripcion;
            }
        }
        return $returnCollection;
    }
    
	public static function setDefinicionIngresantes($coleccion,$dataPost){
        $returnCollection = null;
        foreach ($coleccion as $item)
        {
            foreach($dataPost['PreInscripcion']['preinscripcion_aprobocursoingreso'] as $key=>$value)
            {
                
                list($periodoID, $programaID, $cursoID, $tDOCID, $numDOC) = explode('_', $key);
                
                $tmpPreInscripcion = PreInscripcion::model()->findByPK(
                        array(
                            'preinscripcion_ingreso_periodoingreso_id' => $periodoID,
                            'preinscripcion_ingreso_programaacademico_id' => $programaID,
                            'preinscripcion_ingresocurso_id' => $cursoID,
                            'preinscripcion_alumno_persona_tipodocumento_id' => $tDOCID,
                            'preinscripcion_alumno_persona_numerodocumento' => $numDOC
                        )
                );
                
                $tmpPreInscripcion->preinscripcion_fechaingreso = new CDbExpression('NOW()');
                $tmpPreInscripcion->preinscripcion_ingreso = $value;
                $returnCollection[] = $tmpPreInscripcion;
            }
        }
        return $returnCollection;
    }
    
    
    
}

?>